package bt08012014_ngaycong;

public class NgayCong {
	private int ngay;
	private int thang;
	private int nam;
	int check = 0;
	int flag = 0;
	
	public NgayCong(int ngay, int thang, int nam){
		this.nam = nam;
		
		//Tao bien flag de tang so luong ngay cua nam nhuan
		if (nam % 4 == 0){
			flag = 1;
		}
		
		//Kiem tra du lieu thang 2
		if ((thang == 2) && ((ngay>0) && (ngay <= 28 + flag))){
			this.thang = thang;
			this.ngay = ngay;
			check=1;
		}
		
		//Kiem tra du lieu thang thieu 1 ngay
		if ((thang == 4 || thang == 6 || thang == 9 || thang == 11) && ngay>0 && ngay<=30){
			this.thang = thang;
			this.ngay = ngay;
			check=2;
		}
		
		//Kiem tra du lieu thang du
		if ((thang== 1||thang==3||thang==5||thang==7||thang==8||thang==10||thang==12) && ngay>0 && ngay<=31){
			this.thang = thang;
			this.ngay = ngay;
			check=3;
		}
		if (check>0){
			System.out.println("Ban da nhap ngay "+this.ngay+" thang "+this.thang+" nam "+this.nam);
		}
		else
			System.out.println("Ban da nhap ngay "+ngay+" khong thuoc thang "+thang);
		}
	
	//Phuong thuc quy doi ngay sang tong Julius
	public int tinhNgay (){
		int dd = this.ngay;
		int mm = this.thang;
		int yy = this.nam;
			int a = (14 - mm)/12;
			int y = (yy +4800)-a;
			int m = mm+12*a-3;
		return dd + (153*m+2)/5 + 365*y +y/4 - y/100 + y/400 - 32045;
	}
	
	//Phuong thuc tinh so ngay cua thang hien tai
	public int soNgayCuaThang(){
		switch (this.check){
		case 1: return 28 + this.flag;//Thang 2
				
		case 2: return 30;//Thang 4 6 9 10 11
				
		case 3: return 31;//Thang 1 3 5 7 8 10 12
	
		}
		return 0;
	}
	
	//Phuong thuc tinh thu trong tuan
	public String tinhThuTrongTuan(){
		String out = "Khong xac dinh";
		int xNgay = this.ngay;
		int xThang = this.thang;
		int xNam = this.nam;
		if (xThang==1 || xThang==2){
			xThang = xThang + 12;//De tinh duoc thi phai thay thang 1 bang thang 13 va thang 2 bang thang 14
		}
		
		int n = xNgay -1;
		int t = (int) (2.6*(xThang + 1)/1);
		int u = (int) (5.25*(xNam/100)/1);
		int i = (int) (1.25*(xNam%100)/1);
		int s = n + t + u +i;
		int g = 0;
		
		if (xNam%2==0)
			g = (s % 7);
		else
			g = (s % 7) + 1;
		
		switch (g){
		case 1: out = "Chu nhat";
				break;
		case 2: out = "Thu hai";
				break;
		case 3: out = "Thu ba";
				break;
		case 4: out = "Thu tu";
				break;
		case 5: out = "Thu nam";
				break;
		case 6: out = "Thu sau";
				break;
		case 0: out = "Thu bay";
		}
		return out;
	}
	
	//Phuong thuc tinh ngay quoc le (ngay nghi)
	public int xetNgayLe (){
		int ngayLe = this.ngay*100 + this.thang;
		switch (ngayLe){
		case 101:
			System.out.println("Ngay quoc le " + this.ngay + " thang " + this.thang + " nam " + this.nam);
			return 1;
		case 1003:
			System.out.println("Ngay quoc le " + this.ngay + " thang " + this.thang + " nam " + this.nam);
			return 1;
		case 3004:
			System.out.println("Ngay quoc le" + this.ngay + " thang " + this.thang + " nam " + this.nam);
			return 1;
		case 105: 
			System.out.println("Ngay quoc le" + this.ngay + " thang " + this.thang + " nam " + this.nam);
			return 1;
		case 209: 
			System.out.println("Ngay quoc le" + this.ngay + " thang " + this.thang + " nam " + this.nam);
			return 1;
		}
		return 0;
	}
	
	public int soNgayCong(NgayCong p){
		
		//Tinh so ngay bang cach lay hieu cua 2 Tong Julius
		int soNgay = 0;
		soNgay = p.tinhNgay() - this.tinhNgay();
			
		//Tinh so ngay cong
		int soNgayLamViec = soNgay;
		
		NgayCong tam = this;
		for (tam.nam = tam.nam; tam.nam <= p.nam; tam.nam++)
		{
			if (tam.thang == 13){
				tam.thang=1;
			}
			
			//Gan gia tri toi da cho thang trong nam
			int maxThang;
			if (tam.nam == p.nam)
				maxThang = p.thang;
			else
				maxThang = 12;
			
		//Cho thang chay tu thang dau tien den thang cuoi cung
		for (tam.thang = tam.thang ; tam.thang <= maxThang; tam.thang++){
			
			//Tinh so ngay cua thang hien tai
			int soNgayCuaThang = tam.soNgayCuaThang();
			if (tam.thang == p.thang)
				soNgayCuaThang = p.ngay;//Chi tinh den ngay lam viec cuoi cung
			
			//Chay vong lap cho tung thang de tru ra ngay chu nhat
			for(tam.ngay=tam.ngay;tam.ngay<=soNgayCuaThang;tam.ngay++){
				String thu = tam.tinhThuTrongTuan();
					if (thu == "Chu nhat")
					{
						soNgayLamViec--;
						System.out.println(thu + " ngay " + tam.ngay + " thang " + tam.thang + " nam " + tam.nam);
						soNgayLamViec = soNgayLamViec - tam.xetNgayLe();
						}
				soNgayLamViec = soNgayLamViec - tam.xetNgayLe();
				};//Ket thuc vong lap cua ngay	
				tam.ngay = 1;//Neu chua phai la thang cuoi cung thi chuyen ngay ve 1
		};//Ket thuc vong lap cua thang
		};//Ket thuc vong lap nam
		return soNgayLamViec;
	}
}
